このページは私用WordPressの覚え書き兼、テストページです。
「SNSボタン」は、テスト検証用に仮設置しているだけなので、押しても反応しません。

014_1カスタム投稿を作る

「カスタム投稿」を作る覚書メモ


「カスタム投稿」とは

「カスタム投稿」とは、「通常投稿」とは別の新たな投稿枠の事です。

自作テーマを作るにあたって、最初は、それぞれのコンテンツ(「小説」「イラスト」「漫画」など)を、カテゴリーで分けるくらいしか考えてなかったのですが、

WordPress には「通常の投稿」、「更新しない固定ページ」の他に、もうひとつ「カスタム投稿」というのを作ることが出来るという事を知りました。

「カスタム投稿」を作ると、「通常の投稿」の他に、新たにメニュー項目に追加され、「通常の投稿」と完全に分離できます。


「カスタム投稿」を新規設定するには

デフォルトの WoredPress では「カスタム投稿」は、すぐに作れるようにはなっていません。
カスタム投稿」を作るには、「手動で functions.php というのを作ってコードを書いて設定する方法」と「プラグインを入れて設定する方法」の二種類の方法があるようです。

作業的には、おそらく「プラグイン」を使った方が楽だろうと思うのですが、それだと覚えられない、というか、WoredPress の仕組みを学ぶためには、プラグインではなく「手動でfunctions.php にコードを書く方法」方法をとりたいと思います。


functions.php に下記を追記する

6~25行目ひとつぶんです)
7~11行目の ' ' のところを自分の作りたい投稿名に書き換えます)
25行目の ' ' のところは欧文にします。大文字はダメみたいです)
23行目の 'supports' の array(' ') のところは、必要なものを入れます。

(詳しくは → ●WordPress日本語Codex「関数リファレンス」)を見てください。

<?php
//カスタム投稿生成
add_action('init', 'my_custom_post_type'); //WordPressの読み込みが完了し、ヘッダーが送信される前にmy_custom_post_typeをフック
function my_custom_post_type() {

    $labels = array(
        'name' => 'イラスト', //投稿タイプの一般名
        'add_new_item' => '新規イラストを追加',
        'not_found' =>  __('イラストは見つかりませんでした'), //投稿がない場合の管理画面のカスタム投稿タイプ一覧に表示されるテキスト
        'new_item' => __('新しいイラスト'), //編集画面のタイトル
        'view_item' => __('イラストを表示') //記事編集画面の「プレビュー」のテキスト
    );
    $args = array(
        'labels' => $labels, //この投稿タイプのラベルの配列
        'public' => true, //publicly_queriable, show_ui, show_in_nav_menus, exclude_from_searchのデフォルト値を定義するメタ引数
        'publicly_queryable' => true, //フロントエンドで post_type クエリが実行可能かどうか
        'show_ui' => true, //この投稿タイプを管理するデフォルト UI を生成するかどうか
        'exclude_from_search' => false, //この投稿タイプを検索結果から除外するかどうか
        'capability_type' => 'post', //投稿タイプの閲覧/編集/削除権限をチェックするのに使用。初期値: "post"
        'rewrite' => true, //このフォーマットでパーマリンクをリライトする
        'hierarchical' => false, //この投稿タイプが階層(親の指定が許可されている)かどうか
        'menu_position' => 5, //投稿タイプが表示される管理画面のメニューの位置
        'supports' => array('title','editor','thumbnail', 'excerpt','comments','trackbacks') //add_post_type_support()を直接呼び出すエイリアス
    );
    register_post_type('illust',$args); //カスタム投稿タイプとその動作を定義(single.phpに追加する名前)



    $labels = array(
        'name' => 'comic', //投稿タイプの一般名
        'add_new_item' => '新規comicを追加',
        'not_found' =>  __('comicは見つかりませんでした'), //投稿がない場合の管理画面のカスタム投稿タイプ一覧に表示されるテキスト
        'new_item' => __('新しいcomic'), //編集画面のタイトル
        'view_item' => __('comicを表示') //記事編集画面の「プレビュー」のテキスト
    );
    $args = array(
        'labels' => $labels, //この投稿タイプのラベルの配列
        'public' => true, //publicly_queriable, show_ui, show_in_nav_menus, exclude_from_searchのデフォルト値を定義するメタ引数
        'publicly_queryable' => true, //フロントエンドで post_type クエリが実行可能かどうか
        'show_ui' => true, //この投稿タイプを管理するデフォルト UI を生成するかどうか
        'exclude_from_search' => false, //この投稿タイプを検索結果から除外するかどうか
        'capability_type' => 'post', //投稿タイプの閲覧/編集/削除権限をチェックするのに使用。初期値: "post"
        'rewrite' => true, //このフォーマットでパーマリンクをリライトする
        'hierarchical' => false, //この投稿タイプが階層(親の指定が許可されている)かどうか
        'menu_position' => 5, //投稿タイプが表示される管理画面のメニューの位置
        'supports' => array('title','editor','thumbnail', 'excerpt','comments','trackbacks') //add_post_type_support()を直接呼び出すエイリアス
    );
    register_post_type('comic',$args); //カスタム投稿タイプとその動作を定義(single.phpに追加する名前)



    $labels = array(
        'name' => 'お絵かきまとめ', //投稿タイプの一般名
        'add_new_item' => '新規お絵かきまとめを追加',
        'not_found' =>  __('お絵かきまとめは見つかりませんでした'), //投稿がない場合の管理画面のカスタム投稿タイプ一覧に表示されるテキスト
        'new_item' => __('新しいお絵かきまとめ'), //編集画面のタイトル
        'view_item' => __('お絵かきまとめを表示') //記事編集画面の「プレビュー」のテキスト
    );
    $args = array(
        'labels' => $labels, //この投稿タイプのラベルの配列
        'public' => true, //publicly_queriable, show_ui, show_in_nav_menus, exclude_from_searchのデフォルト値を定義するメタ引数
        'publicly_queryable' => true, //フロントエンドで post_type クエリが実行可能かどうか
        'show_ui' => true, //この投稿タイプを管理するデフォルト UI を生成するかどうか
        'exclude_from_search' => false, //この投稿タイプを検索結果から除外するかどうか
        'capability_type' => 'post', //投稿タイプの閲覧/編集/削除権限をチェックするのに使用。初期値: "post"
        'rewrite' => true, //このフォーマットでパーマリンクをリライトする
        'hierarchical' => false, //この投稿タイプが階層(親の指定が許可されている)かどうか
        'menu_position' => 5, //投稿タイプが表示される管理画面のメニューの位置
        'supports' => array('title','editor','thumbnail', 'excerpt','comments','trackbacks') //add_post_type_support()を直接呼び出すエイリアス
    );
    register_post_type('oekaki',$args); //カスタム投稿タイプとその動作を定義(single.phpに追加する名前)


}
?>


'title'=記事タイトル ※必須(デフォルト)
'editor'=本文投稿部分 ※必須(デフォルト)
'thumbnail'=サムネイル(アイキャッチ画像を使用したい時)
'excerpt'=抜粋(本文の抜粋を利用できます)
'comments'=コメントフォーム(入れないとコメントフォームが出てきません)
'trackbacks'=トラックバック(同じく)
を選びました。(後で変えたりするかも)


設定した後は「パーマリンクの設定」を空更新

この functions.php をテーマフォルダに保存したら、管理画面の「設定」→「パーマリンクの設定」を空更新します。

※この空更新をしないと「ページがありません」のようになって、functions.php が認識されないそうです。


ダッシュボードに「メニュー」として追加される

自作テーマでは「イラスト」「comic」「お絵かきまとめ」のカスタム投稿を作成してみました。
こんな感じになります。
   ↓


カスタムでつけた名前とテンプレートファイルとの関連性

25行目 の ' ' の欧文表記名ですが、
普通は、自動的に single.php のテンプレートを使ってくれるのだそうですが、
25行目でつけた名前を single.php のファイル名に追加すると、
(「イラスト」なら、single-illust.php、「SS」なら single-ss.php、などのように) そのテンプレートを優先して使ってくれるのだそうです。
(つまり、カスタム投稿ごとに個別のレイアウトにする事ができます)


これは、すごい便利ですね!